// 给定一个字符串s，要求：逐个翻转字符串中所有的单词
// 说明： 数组字符串s可以在前面，后面或者单词之间包含多余的空格，翻转之后的单词应当只有一个空格分隔，翻转之后的字符串不应该包含额外的空格

// 思路，遍历字符串，统计当前的单词cur，在遇到空格时，把cur存入result数组中，并置为空重新统计，然后最后对result进行翻转并用空格分格
// 时间复杂度：O(n)，n是字符串的长度
// 空间复杂度：O(n)，words数组的大小

function reverseWords(str) {
    let result = []
    let cur = ''
    for (const char of str) {
        if (char === ' ') {
            if (cur) {
                result.push(cur)
                cur = ''
            }
        } else {
            cur += char
        }
    }
    if (cur) {
        result.push(cur)
    }
    let left = 0
    let right = result.length - 1
    while (left < right) {
        [result[left], result[right]] = [result[right], result[left]];
        left++
        right--
    }
    return result.join(' ')
}

let s = "     hello world  abin"
console.log(reverseWords(s));